草庐IT

C++ sizeof 包装类

全部标签

c++ - 图形 API 的包装器

我非常喜欢拥有一个具有适应能力的游戏引擎,不仅在它能做什么,而且在它如何处理新代码方面。最近,对于我的graphics子系统,我编写了一个class来重写,它的工作方式如下:classLowLevelGraphicsInterface{virtualboolsetRenderTarget(constRenderTarget*renderTarget)=0;virtualboolsetStreamSource(constVertexBuffer*vertexBuffer)=0;virtualboolsetShader(constShader*shader)=0;virtualbooldr

C++ 语义类型包装

我有一个数据类型,例如classVector3。现在我需要创建几个类,它们具有与Vector3相同的接口(interface),但具有更高级别的语义(例如:Position、Velocity)。使用typedef是不够的,因为我需要这些类型是不同的,以便它们可以用于重载。在C++0x中,我可能会使用构造函数继承:structPosition:publicVector3{usingVector3::Vector3;};这会不会有什么问题?有没有更好的方法呢?是否可以在不使用C++0x功能且不必显式编写所有Vector3构造函数的情况下做到这一点? 最佳答案

c++ - sizeof(*this) 和结构继承

假设我有一个如下所示的结构:structParentStruct{virtualvoidXYZ(){getSize(sizeof(*this));}intmemberX;}还有另一个继承父结构的struct:structChildStruct:publicParentStruct{intmemberY;intmemberZ;}假设sizeof(int)==4,是否可以将12的值传递给函数getSize()从子结构调用(我目前得到的值是4)?我宁愿不必覆盖所有子结构中的XYZ(),因为我会有很多子结构。 最佳答案 正如其他人所说,th

C++ 类来包装 loadlibrary?

我在想如果有几个类来包装LoadLibrary和GetProcAddress、Library和Function分别。当我在考虑这个时,我不确定它是否可能。这是我的想法:库类:classLibrary{HANDLEm_handle;public://HandlesinitializingtheDLL:Library(std::stringname);//DeinitializestheDLL~Library();HANDLEgetHandle();boolisInitialized();}和Function类:classFunction{public:Function(Library&l

c++ - 通过 SSE4 包装器比较字符串

我需要在支持SSE4的机器上快速比较两个字符串。不写汇编插入怎么办?像longlongbitmask=strcmp(char*a,char*b)这样的包装器将是完美的。 最佳答案 您应该使用英特尔SSE内部函数,而不是使用内联汇编。对于字符串比较,您需要SSE4.2内在函数:文档在这里:http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-mac/GUID-6E9CFDF2-5DF6-42A4-

.net - 遗留 C++ 库的托管 C++ 包装器

我们正在考虑使用托管C++为一些遗留C++库编写.Net可调用包装器。这一切看起来都很简单。有什么需要注意的吗? 最佳答案 我发现在C++/CLI中包装一些现有的C++库通常很容易,并且遇到的陷阱相对较少。我记得的是:在同一个可执行文件/DLL中混合非托管C++代码和C++/CLI代码是一个非常糟糕的主意。我在关闭时遇到了竞争内存管理器的问题(基本上是.NET运行时和常规C++运行时,在关闭时清理内存时相互踩踏,导致不确定的行为哪一个释放了什么)。我没有将静态遗留C++库链接到C++/CLI库,而是创建了一个包含遗留C++的DLL,

c++ - 如何为二维数组的包装类重载数组索引运算符?

这个问题在这里已经有了答案:Operator[][]overload(17个答案)关闭2年前。#defineROW3#defineCOL4classMatrix{private:intmat[ROW][COL];//.....//.....};intmain(){Matrixm;inta=m[0][1];//readingm[0][2]=m[1][1];//writing}我直接认为不可能重载[][]。我想我必须间接地做,但如何实现呢?

c++ - 使用自定义 std::ostream 包装 FILE*

我有一个与std::ostream一起工作的函数。我需要支持使用C文件句柄(FILE*)。我应该创建我自己的std::ostream的子类来委托(delegate)给FILE*吗? 最佳答案 正如BenVoigt所指出的,您想要子类化streambuf。南加州大学网站上的某些页面有documentation,header,和source对于包装FILE*的streambuf子类(stdiobuf)的GNU实现。它对作为(GroovX)一部分的库有一些依赖性,但这些应该很容易删除(我将从删除对GVX_TRACE的所有引用开始)。有趣的

c++ - 与 std::mutex 相比,其他互斥包装器库有哪些优势?

C++标准库提供了std::mutex(lock,unlock,try_lock)功能,可以在多线程环境中工作。我还听说过包装库(例如Boost::mutex),据我所知,它们提供相同的功能(lock、unlock、try_lock).我的问题是,与标准包装库相比,使用此类包装库有什么优势? 最佳答案 std::mutex、std::thread和线程库的其他元素仅适用于C++11。boost::mutex等早于C++11。所以优点是如果您没有C++11支持,您可以使用它们。 关于c++

c++ - 将 std::atomic_flag 包装在 getter/setter 中是否会使它的 "atomicity"无效?

假设我有一个包含std::atomic_flag作为私有(private)成员的类,通过getter公开。类似于以下内容(伪代码):classThing{private:std::atomic_flagready=ATOMIC_FLAG_INIT;public:isReady(){returnready.test_and_set();}}我天真的问题是:通过方法查询标志是否会将其变成非原子操作,成为非原子函数调用(或者是?)?我是否应该让我的ready标记为公共(public)成员并直接查询它? 最佳答案 不,它没有。test_an